package src.main.java.entity;
import java.util.Calendar;
import java.util.Date;
import java.util.ArrayList;

public class ScoreCalc {
	
	private static int validadeOcorrencia = 5;//validade de uma ocorrencia em anos
	private static int toleranciaDividaMaxima = 25000;//maximo de divida que uma pessoa pode ter
	
	
	public static String calculaScore (Pessoa p, ArrayList<Ocorrencia> ocs) {
		
		double fatorValor=0, dividaTotal=0, fatorScore, fatorFinal;
		for (Ocorrencia o:ocs) {
			if (dataValida(o.getData()) && !o.getRemovido() )
				dividaTotal += o.getValor();
		}
		
		//System.out.println("divida total "+dividaTotal);
		if (dividaTotal >= toleranciaDividaMaxima) 
			fatorValor = 1.0;
		else 
			fatorValor = dividaTotal/toleranciaDividaMaxima;
		
		fatorValor = 1-fatorValor;
		
		if("A".equals(p.getScore())) fatorScore = 1.0;
		else if("B".equals(p.getScore())) fatorScore = 0.9;
		else if("C".equals(p.getScore())) fatorScore = 0.6;
		else if("D".equals(p.getScore())) fatorScore = 0.3;
		else fatorScore = 0.0;
		
		fatorFinal = (Math.pow(fatorScore, 2) * fatorValor);
		fatorFinal = Math.cbrt(fatorFinal);
		
		
		//System.out.println("fs "+fatorScore+" fv "+fatorValor+" = "+fatorFinal);
		
		if(fatorFinal==1) return "A";
		else if (fatorFinal <1 && fatorFinal >= 0.8) return "B";
		else if (fatorFinal <0.8 && fatorFinal >= 0.6) return "C";
		else if (fatorFinal <0.6 && fatorFinal >= 0.4) return "D";
		else return "X";
	}
	
	
	public static boolean dataValida(Date d) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)-validadeOcorrencia);
		Calendar aux = Calendar.getInstance();
		aux.setTime(d);
		if (cal.before(aux)) 
			return true;
		else 
			return false;
	}
	
	
	/* TESTE
	public static void main(String[] args) {
		
		Pessoa p = new Pessoa();
		p.setRemovido(false);
		p.setScore("A");
		
		ArrayList<Ocorrencia> a = new ArrayList<Ocorrencia>();
		Calendar cal = Calendar.getInstance();
		Date d = cal.getTime();
		
		Ocorrencia o1 = new Ocorrencia();
		o1.setData(d);
		o1.setValor(10000.0);
		o1.setRemovido(false);
		a.add(o1);
		
		System.out.println(ScoreCalc.calculaScore(p, a));
	}*/
	
}
